{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program Files (x86)\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "# -*- coding: UTF-8 -*-\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import numpy.core.umath_tests\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "sns.set(style=\"whitegrid\")\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import learning_curve\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = pd.read_csv('data/cleaned.csv')\n",
    "df1.drop(['Product_ID','Product_Category_1','Product_Category_2','Product_Category_3'], axis=1,inplace=True)\n",
    "tmp_df1 = df1[['User_ID','Purchase']]\n",
    "tmp_df2 = df1[['User_ID','Gender','Age','Occupation','City_Category','Stay_In_Current_City_Years','Marital_Status']]\n",
    "\n",
    "tmp_df = tmp_df1.groupby('User_ID').sum()\n",
    "tmp_df2=tmp_df2.drop_duplicates(['User_ID'])\n",
    "tmp_df2.sort_values(\"User_ID\",inplace=True)\n",
    "tmp_df2=tmp_df2.reset_index(drop=True)\n",
    "\n",
    "tmp_df=tmp_df.reset_index(drop=True)\n",
    "df = pd.concat([tmp_df2,tmp_df['Purchase']],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   User_ID  Gender  Marital_Status  Purchase  0-17  18-25  26-35  36-45  \\\n",
      "0        0       0               0    333481     1      0      0      0   \n",
      "1        1       1               0    810353     0      0      0      0   \n",
      "2        2       1               0    341635     0      0      1      0   \n",
      "3        3       1               1    205987     0      0      0      0   \n",
      "4        4       1               1    821001     0      0      1      0   \n",
      "\n",
      "   46-50  51-55 ...  11  12  13  14  15  16  17  18  19  20  \n",
      "0      0      0 ...   0   0   0   0   0   0   0   0   0   0  \n",
      "1      0      0 ...   0   0   0   0   0   1   0   0   0   0  \n",
      "2      0      0 ...   0   0   0   0   1   0   0   0   0   0  \n",
      "3      1      0 ...   0   0   0   0   0   0   0   0   0   0  \n",
      "4      0      0 ...   0   0   0   0   0   0   0   0   0   1  \n",
      "\n",
      "[5 rows x 40 columns]\n"
     ]
    }
   ],
   "source": [
    "#特征工程 解决编码问题\n",
    "#User_ID和Product_ID使用序号，Gender和Marray使用二元类型，其他使用热编码\n",
    "le_U_ID = LabelEncoder()\n",
    "df['User_ID'] = le_U_ID.fit_transform(df['User_ID'])\n",
    "le_P_ID = LabelEncoder()\n",
    "df['Gender'] = np.where(df['Gender']=='M',1,0) # Female: 0, Male: 1\n",
    "df_Age = pd.get_dummies(df.Age)\n",
    "df_CC = pd.get_dummies(df.City_Category)\n",
    "df_SIC = pd.get_dummies(df.Stay_In_Current_City_Years)\n",
    "df_encoded = pd.concat([df,df_Age,df_CC,df_SIC],axis=1)\n",
    "df_encoded.drop(['Age','City_Category','Stay_In_Current_City_Years'],axis=1,inplace=True)\n",
    "df_ocup = pd.get_dummies(df.Occupation)\n",
    "df_encoded = pd.concat([df_encoded,df_ocup],axis=1)\n",
    "df_encoded.drop(['Occupation'],axis=1,inplace=True)\n",
    "print(df_encoded.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_frac = df_encoded.sample(frac=0.02,random_state=100)\n",
    "X = df_frac.drop(['Purchase','User_ID'], axis=1)\n",
    "y = df_frac['Purchase']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "param_grid = {'n_estimators':[1,3,10,30,100,150,300,400,500],'max_depth':[1,3,5,7,9,11]}\n",
    "grid_rf = GridSearchCV(RandomForestRegressor(),param_grid,cv=10,scoring='neg_mean_squared_error').fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameter: {'max_depth': 5, 'n_estimators': 10}\n",
      "Best score: 740336.79\n"
     ]
    }
   ],
   "source": [
    "print('Best parameter: {}'.format(grid_rf.best_params_))\n",
    "print('Best score: {:.2f}'.format((-1*grid_rf.best_score_)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_sizes, train_scores, valid_scores = learning_curve(RandomForestRegressor(max_depth=5, n_estimators=10), X_train, y_train, cv=10, scoring='neg_mean_squared_error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1dac1e3ca20>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_scores = (-1*train_scores)**0.5\n",
    "valid_scores = (-1*valid_scores)**0.5\n",
    "train_scores_mean = np.mean(train_scores, axis=1)\n",
    "train_scores_std = np.std(train_scores, axis=1)\n",
    "valid_scores_mean = np.mean(valid_scores, axis=1)\n",
    "valid_scores_std = np.std(valid_scores, axis=1)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(train_sizes,valid_scores_mean,label='valid')\n",
    "plt.plot(train_sizes,train_scores_mean,label='train')\n",
    "plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.3,color=\"g\")\n",
    "plt.fill_between(train_sizes, valid_scores_mean - valid_scores_std,valid_scores_mean + valid_scores_std, alpha=0.3, color=\"b\")\n",
    "plt.xlabel('Number of samples')\n",
    "plt.ylabel('RMSE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,0,'relative importance')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rf = RandomForestRegressor(max_depth=5, n_estimators=10).fit(X_train,y_train)\n",
    "f_im = rf.feature_importances_.round(3)\n",
    "ser_rank = pd.Series(f_im,index=X.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure()\n",
    "sns.barplot(y=ser_rank.index,x=ser_rank.values,palette='deep')\n",
    "plt.xlabel('relative importance')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set RMSE: 490031.214\n"
     ]
    }
   ],
   "source": [
    "y_predicted = rf.predict(X_test)\n",
    "print('Test set RMSE: {:.3f}'.format(mean_squared_error(y_test,y_predicted)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
